package com.catmiao.rdd.instance;


import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;

import java.util.Arrays;
import java.util.List;

public class Spark05_Disk_Partition_Data {

    public static void main(String[] args) {

        final SparkConf sparkConf = new SparkConf();
        sparkConf.setMaster("local[*]");
        sparkConf.setAppName("spark");

        final JavaSparkContext sc = new JavaSparkContext(sparkConf);


        /**
         * 字节数 5
         * 5/2 = 2
         * 5/2 =2 ...1 每个分区2个字节
         *
         * 1/2 > 10% 认为需要一个新的分区  3个分区
         *
         *
         * TODO 实际并非如此 spark本身不支持文件操作，文件操作由hadoop完成
         *  hadoop进行文件切片数量的计算和文件数据存储的计算规则不一样
         *   1. 分区数量计算的时候考虑的是尽可能平均分配，从字节数
         *   2. 分区数据的存储是考虑业务数据的完整性：按照行来读取
         *   读数据时还需要考虑数据的偏移量，偏移量是从0开始的
         *   读取数据时相同的偏移量不能重复读取
         *   0【2】  [0,1]
         *   1【2】  [1,3]
         *   2【1】  [3,3]
         *
         *   ------
         *   1@
         *   2@
         *   3
         *
         *   因为是读取偏移量，当读到下一行时只能把整行都读进来
         *
         */
        JavaRDD<String> rdd = sc.textFile("datas/1.txt", 2);


        rdd.saveAsTextFile("java_out/02");


        sc.close();


    }
}
